﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;

namespace EventPlanner.Models
{
    /* Clase para modelar la base de datos de Event Plnanner */
    public class EventPlannerDB : DbContext, IDbContext
    {
        public DbSet<Evento> Eventos { get; set; }        
        public DbSet<Contacto> Contactos { get; set; }
        public DbSet<Usuario> Usuarios { get; set; }
                
        public static String UsuarioActual { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Evento>()
            .HasMany(u => u.UsuariosInscriptos).WithMany(e => e.EventosInscriptos)
            .Map(t => t.MapLeftKey("EventoID")
                .MapRightKey("UsuarioID")
                .ToTable("Inscripciones"));
        }

        /* Implementacion de la interfaz IDbContext */
        

        IQueryable<Evento> IDbContext.Eventos
        {
            get { return Eventos; }
        }

        IQueryable<Contacto> IDbContext.Contactos
        {
            get { return Contactos; }
        }

        IQueryable<Usuario> IDbContext.Usuarios
        {
            get { return Usuarios; }
        }

        int IDbContext.SaveChanges()
        {
            return SaveChanges();
        }
        
        T IDbContext.Add<T>(T entity)
        {
            return Set<T>().Add(entity);
        }

        T IDbContext.Delete<T>(T entity)
        {
            return Set<T>().Remove(entity);
        }

        T IDbContext.Find<T>(int num)
        {
            return Set<T>().Find(num);
        }

        T IDbContext.Attach<T>(T entity)
        {
            var entry = Entry(entity);
            entry.State = System.Data.EntityState.Modified;
            return entity;
        }

        public void SetActualUser(String u)
        {
            UsuarioActual = u;
        }

        public String GetActualUser()
        {            
            return (UsuarioActual);
        }

        
        


    }
}